Release 0.4.10 - #320
Merged
Merged
Conversation
- Update macos/Runner/Release.entitlements for hardened runtime (non-App-Store Developer ID distribution) without App Sandbox. - Add optional Sign and notarize macOS app step to release.yml. Runs only when MACOS_SIGN_IDENTITY and MACOS_NOTARY_KEY secrets are set. - Rewrite docs/macos-signing.md with full setup guide. When Apple Developer secrets are configured, future releases will produce a signed, notarized, and stapled macOS .app that opens with a double-click.
…nged - Revert macos/Runner/Release.entitlements to the original Flutter default (App Sandbox enabled). This keeps unsigned macOS builds exactly as before. - Add macos/Runner/ReleaseSigned.entitlements for use only when CI signs the app with a Developer ID certificate (hardened runtime, no sandbox). - Update the signing step in release.yml to use ReleaseSigned.entitlements. - Update docs/Obsidian notes to describe the two-file approach. Signing remains optional: the step runs only when the required Apple Developer secrets are configured. Until then, releases continue to produce unsigned macOS zips as they did before.
…ices on app shutdown
fix(core): disconnect SQLite service inside disconnectAllExternalServices on app shutdown
…t/port (#273) - Add sslRootCert, sslCert, sslKey fields to PostgresConnection and extract them from connectionString query parameters in fromConnectionRow. - Build a SecurityContext in _buildSettings() when any certificate path is present and pass it to ConnectionSettings. - For URI-based connections, fall back to the extracted SecurityContext when the parsed URI does not provide one. - Forward SSL certificate parameters in connectToDatabase() so database-switch connections keep the same certs. - Pass the certificate paths from the form to the temporary PostgresConnection used for testConnection(). - Add tests covering extraction, preservation, and actual use during connect() for host/port mode.
…275) - Add PoolEntryLock to coalesce concurrent createIfAbsent calls for the same pool key so only one underlying connection is created. - Use the lock in PostgresConnectionPool, MysqlConnectionPool, and SqliteConnectionPool acquire() paths. - Increment refs after the shared creation future completes so racing callers share the same connection without orphaned sockets. - Add concurrent-acquire tests for PostgresConnectionPool.
…tore failures (#276) - removeConnection always deletes the SQLite row even if secure-store delete fails (e.g. missing key or unavailable libsecret). - addConnection rolls back the SQLite insert (and any partial secrets) when writing to the OS secure store fails. - updateConnection restores the previous SQLite row and previous secrets when a secure-store write fails, then rethrows the original error. - Extend the in-memory secrets backend with failNextWrite/failNextDelete hooks and cover the failure paths with unit tests.
…micity fix(storage): keep connection metadata and secrets consistent on OS store failures (#276)
…te (#277) - Write CSV to disk via IOSink in writeResultGridCsv instead of assembling one giant String before File.writeAsString. - Add resultGridAsCsvAsync (Isolate.run) and use it for Copy as CSV so large grids do not freeze the Flutter UI isolate. - Rebuild resultGridAsCsv with StringBuffer to reduce intermediate allocations. - Cover streaming and async paths with unit tests.
fix(csv): stream file export and build clipboard CSV off the UI isolate (#277)
Tokenize SQL outside string literals and comments before splitting on semicolons so valid queries with ';' in literals are not blocked. Reject INTO OUTFILE, FOR UPDATE, and other write-side constructs when they appear outside masked literals/comments.
fix(mysql): harden custom SELECT validation in table browser (#274)
…rage (#272) Replace silent catch (_) {} blocks with debugPrint so disconnect failures, stats probe errors, and folder load/migration issues are visible in logs.
fix(core): log swallowed errors in connection drivers and folders storage (#272)
Add sqflite_common_ffi to _driverInfoList so the dialog lists all supported database drivers, and extend the widget test to assert SQLite.
fix(connections): show SQLite in Driver Manager built-in list (#270)
Replace the noop onPressed handler with a disabled OutlineButton and tooltip when no execute action is available. Add widget tests for the hidden empty-state button and the disabled fallback workspace button.
Remove unused onExecute parameter; keep onPressed null with tooltip.
Use a const StatelessWidget and drop unused AnimatedScale import.
fix(ui): disable workspace Execute/Refresh when query cannot run (#266)
…oDB, Redis (#278) - Add shared SSL certificate URI helpers and form fields (sslrootcert/sslcert/sslkey). - Extend MySQL, MongoDB, and Redis connection forms with cert file pickers and URI sync. - Pass SecurityContext in MysqlConnection (vendored mysql_client patch), translate Querya SSL params for mongo_dart TLS, and use SecureSocket for Redis rediss://. - Add unit tests for SSL helpers and driver URI parsing.
Move vendored mysql_client to dependency_overrides and drop unused import.
…o-redis feat(connections): add SSL client certificate support for MySQL, MongoDB, Redis (#278)
…56 (#280) Add Phase 1 auto-update core: SemVer version gate, GitHub Releases client, SHA256 manifest verification on download, and update channel preferences (stable vs dev) with optional startup background check hook.
feat(core): implement AppUpdaterService with GitHub Releases and SHA256 (#280)
…281) Wire Phase 2 auto-update UI: Help menu action, UpdateDialog with check/ download/progress states, pulsing title-bar badge via UpdateController, General preferences toggle, and startup background check hook.
Monitor sandboxed plugins with system.ping every 30s, SIGKILL on 5s pong timeout, and exponential restart backoff (issue #303).
feat(sandbox): Watchdog heartbeat and auto-recovery (#303)
Add Sanitization Pipe for plugin stderr (JWT/PEM/URI/password redaction), 5MB rotating logs under logs/sandbox/, and security_audit.log (issue #304).
…-pipe feat(sandbox): stderr sanitization pipe and audit log (#304)
Introduce EmbeddedSandboxRuntime with a declarative JSONC engine for SDUI and SQL helpers, QuickJS/WASM FFI stubs, ExtensionType.script, and allow installing database drivers that declare a valid process sandbox (#305).
…time feat(sandbox): Level-1 embedded runtime and preview gate (#305)
Add PluginRpcBridge with handshake, crash fail-over for pending requests, graceful shutdown, and optional watchdog/stderr pipe wiring (issue #312).
feat(extensions): Block C RPC Protocol Bridge (#312)
Implement Block A SduiFormBuilder (text/number/password/checkbox/select/ file_picker) and SduiTreeBuilder with lazy child loading (issue #314).
feat(ui): Block A SDUI Form and Tree builders (#314)
…ng graceful shutdown and expand edge case tests - Add _ownsClient flag to SandboxWatchdog to avoid prematurely closing external JsonRpcStdioClient passed from PluginRpcBridge during shutdown() - Add test verifying enableWatchdog: true allows clean system.shutdown RPC without StateError - Add edge case tests for multiline OPENSSH/RSA private keys and varied URI protocols in SandboxSanitizer - Add test verifying malformed UTF-8 stream decoding resilience in SandboxStderrPipe
Add LocalExtensionInstaller with path-traversal protection and policy checks, Preferences Extensions section, and Install from file in the Extension Manager (issue #316).
feat(settings): manual local extension install (#316)
Wire Discovery→Registration→Activation: preserve contributions in manifests, list installed drivers in New Connection with SDUI forms, and open schema trees through PluginRpcBridge (#318).
Expose HTTP 8123 / native 9000 with querya credentials and seed SQL so extension drivers can be tested against a real instance.
…lback Zip installs lose +x bits; chmod after unpack. Probe bubblewrap before use so hosts without user namespaces still launch plugins.
Replace the activation placeholder with query/table views, wire global SQL actions for extension connections, and improve SDUI tree/icons.
Remove unused _resolveManifest and unused imports; prefer const constructors in catalog tests so CI flutter analyze passes.
…ation Update expected NewSqlIntent copy and mock an empty extensions dir so async showDriverManagerDialog settles in widget tests.
…ation feat(extensions): register sandboxed drivers + activate via PluginRpcBridge
Bump pubspec to 0.4.10+1 and document sandboxed drivers, SDUI, updater, and reliability fixes shipped since 0.4.9.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release 0.4.10 — sandboxed extension runtime, SDUI, external database driver Registration/Activation, and in-app updates.
What's included
.zip/.qextinstall (enhancement(settings): allow manual install of extensions from local .zip/.qext files #316) and Driver Registration + Activation (feat(extensions): register sandboxed drivers in New Connection + activate via PluginRpcBridge #318 / feat(extensions): register sandboxed drivers + activate via PluginRpcBridge #319) — installed drivers in New Connection, SDUI forms, schema tree, SQL workspace; Docker ClickHouse for local testing.Release checklist
CHANGELOG.mdupdated for0.4.10pubspec.yamlversion bumped to0.4.10+10.4.10to trigger the Release workflow